package designModel.proxy;

/**
 * 有购物需求的消费者
 */
public class Shopper {
    public static void main(String[] args) {
        //方式一:直接创建一个超级市场对象进行购物
        System.out.println("直接购买:");
        new Supermarket().buy("可口可乐");

        //方式二:使用代购实现购物(静态代理)
        System.out.println("\n使用静态代理购买:");
        Supermarket supermarket = new Supermarket();
        ShopProxy shopProxy = new ShopProxy(supermarket);
        shopProxy.buy("进口可口可乐");

        //方式三:使用动态代理
        System.out.println("\n使用动态代理购买:");
        //使用泛型获取实例对象的时候,直接new一个对象是不行的,需要使用匿名内部类
        Shopping shopping = new DynamicShopProxy<Supermarket>() {
        }.getProxy();
        shopping.buy("可口可乐");
    }
}
